import { getConfig, saveDocTitle } from "./dao.js";
import axios from 'axios';


export async function buildTitles(host_name, title, count, account) {

    try {
        let config = await getConfig(host_name);
        let content = `生成${count}个"${title}"的主题,主题字数在5到15个之间,仅返回列表`

        let choice = await requestXunfei(config.xunfei_api_key, config.xunfei_api_secret, content)

        let titles = choice.split("\n")
        for (let j = 0; j < titles.length; j++) {
            let index = titles[j].indexOf(". ")
            if (-1 == index) {
                continue
            }
            if (titles[j].length < 5 || titles[j].length > 15) {
                continue
            }
            let t = titles[j].substring(2)
            t = t.replaceAll('.', '')
            t = t.trim()

            await saveDocTitle(t, account)
        }

    } catch (error) {
        throw error
    }

}



export async function getNormalDocxData(host_name, title, wordCount) {

    try {
        let config = await getConfig(host_name);

        let content = `你是一名百度文库创作者,撰写一篇标题为"${title}"的${wordCount}字文档,文档要求:1.确保文档内容不违反百度文库的社区规则和国家法律法规,包括但不限于版权、隐私、色情、暴力等敏感内容;2.禁止出现广告、软文广告、图文广告、联系方式、水印、乱码、空白过多、泄漏隐私、模糊、遮挡、无法阅读、破解内容、机密文件、链接等;3.文档内容完整,不影响阅读;4.主题使用一级标题标记,且不含"标题"两个字和空格;5.返回标准Markdown内容`

        console.log(`start request xunfei for ${title}`);
        let choice = await requestXunfei(config.xunfei_api_key, config.xunfei_api_secret, content)
        console.log(`end request xunfei for ${title}`);

        return choice

    } catch (error) {
        throw error
    }

}


export async function getRewardDocxData(host_name, title, type) {

    try {
        let config = await getConfig(host_name);

        let content;
        if (type == '' || type.length < 1) {
            content = `你是一名百度文库创作者,撰写一篇标题为"${title}"的文档,文档要求:1.确保文档内容不违反百度文库的社区规则和国家法律法规,包括但不限于版权、隐私、色情、暴力等敏感内容;2.禁止出现广告、软文广告、图文广告、联系方式、水印、乱码、空白过多、泄漏隐私、模糊、遮挡、无法阅读、破解内容、机密文件、链接等;3.文档内容完整,不影响阅读;4.主题使用一级标题标记,且不含"标题"两个字和空格;5.返回标准Markdown内容`
        } else {
            content = `你是一名百度文库创作者,撰写一篇标题为"${title}"的${type}类型文档,文档要求:1.确保文档内容不违反百度文库的社区规则和国家法律法规,包括但不限于版权、隐私、色情、暴力等敏感内容;2.禁止出现广告、软文广告、图文广告、联系方式、水印、乱码、空白过多、泄漏隐私、模糊、遮挡、无法阅读、破解内容、机密文件、链接等;3.文档内容完整,不影响阅读;4.主题使用一级标题标记,且不含"标题"两个字和空格;5.返回标准Markdown内容`
        }

        console.log(`start request xunfei for ${title}`);
        let result = await requestXunfei(config.xunfei_api_key, config.xunfei_api_secret, content)
        console.log(`end request xunfei for ${title}`);
        
        return result

    } catch (error) {
        throw error    
    }

}



async function requestXunfei(xunfei_api_key, xunfei_api_secret, content) {
    var data = JSON.stringify({
        "model": "4.0Ultra",
        "messages": [
            {
                "role": "user",
                "content": content
            }
        ]
    });

    var config = {
        method: 'post',
        url: 'https://spark-api-open.xf-yun.com/v1/chat/completions',
        headers: {
            'Authorization': `Bearer ${xunfei_api_key}:${xunfei_api_secret}`,
            'Content-Type': 'application/json'
        },
        data: data
    };

    try {
        let resp = await axios(config)        
        let body = resp.data
  
        console.log(body);
        
        if (body.message != 'Success') {
            throw new Error("xunfei request error")
        }
        return body.choices[0].message.content.replaceAll("X","_");
    } catch (error) {
        throw error.message
    }

}

















